/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package modele;

import bdd.BDDManager;
import exception.AccessErrorException;
import exception.ConnectionBugException;
import exception.NoDataException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Florian MININ & Khémon BEH
 */
public class PalmaresBDD implements Palmares{

    List<EnregistrementScore> listScore;

    public PalmaresBDD(){
        listScore = new ArrayList<EnregistrementScore>();
    }

    public void initialiser() throws NoDataException, AccessErrorException{
        listScore = initialiseBdd();
    }
    /**
     * Ajoute un enregistrement à la liste de score
     * @param enr
     */
    public static void ajouterScoreBDD(EnregistrementScore enr) throws AccessErrorException{
        String sql = "insert into YAMS.PALMARES (NOMJOUEUR, SCORE) "
                + "values ('"+enr.getNomJoueur()+"', "+
                enr.getScore()+")";

        try {
            Statement stat = BDDManager.getInstance().createStatement();
            int rs = stat.executeUpdate(sql);

        } catch (Exception ex) {
            throw new AccessErrorException(AccessErrorException.DATA);
        }


    }

    /**
     * Méthode privée qui va chercher l'ensemble des scores dans la bdd
     * @return
     * @throws NoDataException
     * @throws AccessErrorException
     */
    private List<EnregistrementScore> initialiseBdd() throws  NoDataException, AccessErrorException{
       String sql = "select * from YAMS.PALMARES order by score desc";
       List<EnregistrementScore> contenuBDD = new ArrayList<EnregistrementScore>();
       try {
            Statement stat = BDDManager.getInstance().createStatement();
            ResultSet rs = stat.executeQuery(sql);
            int tmpNumCategorie = 0;
            int i = 0;
            EnregistrementScore enr;
            //On récupère seulement les 10 premiers score réalisées
            while (rs.next() && i < 10) {
                //On récupère pour chacun des enregistrements, le nom et le score
                enr = new EnregistrementScore(rs.getString("NOMJOUEUR"), rs.getInt("SCORE"));
                contenuBDD.add(enr);
                i++;
            }
        } catch (SQLException ex) {
            throw new AccessErrorException(AccessErrorException.DATA);
        }
        if(contenuBDD.isEmpty()){
            throw new NoDataException();
        }
        return contenuBDD;
    }

    public List<EnregistrementScore> getListEnregistrement(){
        return listScore;
    }

    public void deconnecter() throws ConnectionBugException{
        BDDManager.deconnectBDD();
    }
}
